package 
{
	import flash.utils.Dictionary;
	import flash.utils.flash_proxy;

	/**
	 *  
	 * 错误类的重写
	 * 可以扩展为后期对 错误的跟踪
	 * @author iceman
	 * 
	 */
	public class FatError extends Error
	{
		/**
		 * 错误提示:这是个抽象类,必须继承后使用 
		 */
		public static const ABSTRACT_CLASS:int 					= 0xff0001;
		/**
		 * 错误提示:此为单例类
		 */
		public static const SINGLETON_CLASS:int 				= 0xff0002;
		/**
		 * 错误提示:得到值为NULL
		 */
		public static const VALUE_IS_NULL:int 					= 0xff0003;
		/**
		 * 错误提示:这是个抽象方法，必须override后再调用
		 */
		public static const ABSTRACT_FUN:int 					= 0xff0004; 
		
		/**
		 * 错误提示:消息类型CMD错误,无法解析 
		 */
		public static const NOTIFICATION_CMDTYPE_ERROR:int 		= 0xff0005;
		
		/**
		 * 错误提示:没有配置此后缀的加载策略 
		 */
		public static const LOAD_NOHAS_SUFFIX:int 				= 0xff0006;
		
		/**
		 * 错误提示:本地共享对象写入错误 
		 */
		public static const COOKIEMANGER_ERROR:int 				= 0xff0007;
		/**
		 * 错误提示:FPROXY代理方法无法调用 
		 */
		public static const FPROXY_CALLPROPERTY_ERROR:int 		= 0xff0008;
		
		/**
		 * 错误提示:创建ID超过最大值 
		 */
		public static const IDCREATOR_OVER_MAX:int 				= 0xff0009;
		
		/**
		 * 错误提示:没有此名称的模块 
		 */
		public static const MODULE_NO_HAS_THENAME:int 			= 0xff000a;
		
		/**
		 * 错误提示:view已经被绑定到管理器无法再次绑定 
		 */
		public static const VIEW_HAS_BIND:int 					= 0xff000b;
		
		/**
		 * 错误提示:在状态容器没有找到此状态对象 
		 */
		public static const NO_FOUND_STATE_OBJ:int 				= 0xff000c;
		
		/**
		 * 错误提示：资源代理器接口对象不是一个sprite类型 
		 */
		public static const RES_PROXY_IS_NOT_SPRITE:int			= 0xff000d;
		
		/**
		 * 错误提示：资源工厂没有设置 配置资源配置器 
		 */
		public static const RES_FACTORY_NOHAS_CFG:int			= 0xff000e;
		
		/**
		 * 错误提示：资源工厂预加载资源不能被清理 
		 */
		public static const RES_FACTORY_PRE_NOT_CLEAR:int		= 0xff000f;

		/**
		 * 错误提示:当前错误提示的最大序号 
		 */
		public static const NOW_MAX_INDEX:int 					= 0xff0010;
		
		/**
		 * 错误提示：值为重复的 
		 */
		public static const VALUE_IS_REPEAT:int					= 0xff0011;
		
		
		private static var m_bInit:Boolean = false;
		private static var m_errorList:Dictionary = new Dictionary(false);
		public function FatError(id:int,message:*="")
		{
			if(!m_bInit)
			{
				initError();
				m_bInit = true;
			}
			super("id:"+id+" " + m_errorList[id]+":"+message, id);
		}
		/**
		 * 添加 错误配置 
		 * @param _id 错误ID
		 * @param _str 错误内容
		 * 
		 */
		public static function addError(_id:int,_str:String):void
		{
			m_errorList[_id] = _str;
		}
		/**
		 * 初始化 
		 * 
		 */
		private static function initError():void
		{
			m_errorList[ABSTRACT_CLASS] = "这是个抽象类,必须继承后使用";
			m_errorList[SINGLETON_CLASS]="此为单例类";
			m_errorList[VALUE_IS_NULL]="得到值为NULL";
			m_errorList[ABSTRACT_FUN]="这是个抽象方法，必须override后再调用";
			m_errorList[NOTIFICATION_CMDTYPE_ERROR]="消息类型CMD错误,无法解析";
			m_errorList[LOAD_NOHAS_SUFFIX]="没有配置此后缀的加载策略";
			m_errorList[COOKIEMANGER_ERROR]="本地共享对象写入错误";
			m_errorList[FPROXY_CALLPROPERTY_ERROR]="FPROXY代理方法无法调用";
			m_errorList[IDCREATOR_OVER_MAX]="创建ID超过最大值";
			m_errorList[MODULE_NO_HAS_THENAME]="没有此名称的模块";
			m_errorList[VIEW_HAS_BIND]="view已经被绑定到管理器无法再次绑定";
			m_errorList[NO_FOUND_STATE_OBJ]="在状态容器没有找到此状态对象";
			m_errorList[RES_PROXY_IS_NOT_SPRITE] = "资源代理器接口对象不是一个sprite类型";
			m_errorList[RES_FACTORY_NOHAS_CFG] = "资源工厂没有设置 配置资源配置器 ";
			m_errorList[RES_FACTORY_PRE_NOT_CLEAR] = "资源工厂预加载资源不能被清理  ";
			m_errorList[VALUE_IS_REPEAT]="值为重复添加的！";
			
			
		}
	}
}